package sdk

//import (
//	"proto/model/user_info"
//)

type UserInfo struct {
	ID           int64  `json:"-" `           //忽略 		mock用字段
	UserId       int64  `json:"userId"`       //用户ID		int64,string	用户唯一ID
	UserName     string `json:"userName"`     //用户名		string	用户登陆名
	Nickname     string `json:"nickName"`     //用户昵称	string
	Level        int32    `json:"level"`        //用户等级	int
	Avatar       string `json:"avatar"`       //用户头像	string	用户头像URL地址
	Gender       int32    `json:"gender"`       //性别		int
	Role         int32    `json:"role"`         //用户角色	int	1:正常用户 2:机器人
	Balance      int64  `json:"balance"`      //用户余额	int64,string	前端需要除100
	AgentId      int32   `json:"agentId"`    //业主id
	Status       int32    `json:"status"`       //用户状态	int	用户状态 1：正常 2:锁定
	OnlinePosition string    `json:"onlinePosition"` //在线状态	int	在线状态 1:在线 2:离线
	GameStatus   int    `json:"gameStatus"`   //游戏状态	int	游戏状态  1:空闲 2:游戏中
	GameId       string `json:"gameId"`       //游戏中游戏ID	string	如果在游戏中返回 大厅：000000
	GameInfo     string `json:"gameInfo"`     //游戏信息	string	当前游戏中游戏信息
	Ip           string `json:"ip"`           //登陆ip		string	当前登陆的IP
	City         string `json:"city"`         //登陆城市	string	当前登陆的城市

	Birthday string 		`json:"birthday"`		    //生日
	Email   string  			`json:"email"`				//邮箱
	Mobile  string  			`json:"mobile"`				//手机
	Qq      string  				`json:"qq"`				    //qq
	Wechat  string 			`json:"wechat"`				//微信
	RealName string  		`json:"real_name"`			//用户真实姓名
	IsAnonyous int32 		`json:"is_anonyous"`	 //是否游客
	IsGrayUser int32  		`json:"is_gray_user"`	 //灰度用户标记
	LoginIp  string         `json:"loginIp"`         //登录ip
	Uid      int64          `json:"uid"`          //用户展示ID
}

func (self *UserInfo) IsOnLine() bool {
	return self.OnlinePosition == "1"
}

func (self *UserInfo) IsRobot() bool {
	return self.Role == 2
}
//
//func (self *UserInfo) Proto() *user_info.UserInfo {
//	// 用户性别 0､未知，1､男，2､女  默认： 男
//	if self.Gender == 0 {
//		self.Gender = 1
//	}
//
//	return &user_info.UserInfo{
//		UserId:       self.UserId,
//		UserName:     self.UserName,
//		Nickname:     self.Nickname,
//		Level:        self.Level,
//		Avatar:       self.Avatar,
//		Gender:       self.Gender,
//		Role:         self.Role,
//		Balance:      self.Balance,
//		Status:       self.Status,
//		OnlinePosition: self.OnlinePosition,
//		GameStatus:   int64(self.GameStatus),
//		GameId:       self.GameId,
//		GameInfo:     self.GameInfo,
//		Ip:           self.Ip,
//		City:         self.City,
//	}
//}


type UserInfoNew struct {
	ID           int64  `json:"-" `           //忽略 		mock用字段
	UserId       int64  `json:"userId"`       //用户ID		int64,string	用户唯一ID
	UserName     string `json:"userName"`     //用户名		string	用户登陆名
	Nickname     string `json:"nickName"`     //用户昵称	string

	Avatar       string `json:"avatar"`       //用户头像	string	用户头像URL地址
	Gender       uint32    `json:"gender"`       //性别		int
	Birthday     string `json:"birthday"`     //
	Email        string  `json:"email"`       //
	Mobile       string  `json:"mobile"`      //
	QQ           string  `json:"qq"`          //
	Wechat       string  `json:"wechat"`      //
	RealName     string  `json:"real_name"`   //用户真实姓名
	Level        int32    `json:"level"`        //用户等级	int

	Status       uint32    `json:"status"`       //用户状态	int	用户状态 1：正常 2:锁定
	OnlinePosition string    `json:"onlinePosition"` //在线状态	int	在线状态 1:在线 2:离线
	GameStatus   int32    `json:"gameStatus"`   //游戏状态	int	游戏状态  1:空闲 2:游戏中
	GameId       string `json:"gameId"`       //游戏中游戏ID	string	如果在游戏中返回 大厅：000000
	GameInfo     string `json:"gameInfo"`     //游戏信息	string	当前游戏中游戏信息
	Role         int32    `json:"role"`         //用户角色	int	1:正常用户 2:机器人
	Balance      int64  `json:"balance"`      //用户余额	int64,string	前端需要除100
	AgentId      int32  `json:"agent_id"`     // 业主id
	PointAmount  int32  `json:"point_amount"` //点控数
	PointGrade   int32  `json:"point_grade"`  //点控级别
	IsAnonyous   int32  `json:"is_anonyous"`  //是否游客

	RoomId       string `json:"room_id"`      // room
	TableId      string `json:"table_id"`     //table
	City         string `json:"city"`         //登陆城市	string	当前登陆的城市
	IsGrayUser   int32  `json:"is_gray_user"` //
}

func (self *UserInfoNew) IsOnLine() bool {
	return self.OnlinePosition == "1"
}

func (self *UserInfoNew) IsRobot() bool {
	return self.Role == 2
}
//
//func (self *UserInfoNew) Proto() *user_info.UserInfo {
//	return &user_info.UserInfo{
//		UserId:       self.UserId,
//		UserName:     self.UserName,
//		Nickname:     self.Nickname,
//		Level:        self.Level,
//		Avatar:       self.Avatar,
//		Gender:       int32(self.Gender),
//		Role:         self.Role,
//		Balance:      self.Balance,
//		Status:       int32(self.Status),
//		OnlinePosition: self.OnlinePosition,
//		GameStatus:   int64(self.GameStatus),
//		GameId:       self.GameId,
//		GameInfo:     self.GameInfo,
//		City:         self.City,
//	}
//}

/**

用戶再現狀態推送
字段	字段名	类型	备注
token	用户登陆token	string
wsId	websocket Id	string	每个ws都有一个唯一编号
userId	用户id	int64
gameId	游戏编号	string
status	在线状态	int	1:上线 2：离线
serviceId	ws网关服务编号	string	后续推送nats数据topic使用， topic: wsgateway.{serviceId}
*/
type UserOnlineStatus struct {
	Token     string `json:"token"`     //token	用户登陆token	string
	WsId      string `json:"wsId"`      //wsId	websocket Id	string	每个ws都有一个唯一编号
	UserId    int64  `json:"userId"`    //userId	用户id	int64
	GameId    string `json:"gameId"`    //gameId	游戏编号	string
	Status    int    `json:"status"`    //status	在线状态	int	1:上线 2：离线
	ServiceId string `json:"serviceId"` //serviceId	ws网关服务编号	string	后续推送nats数据topic使用， topic: wsgateway.{serviceId}
}

func (self *UserOnlineStatus) IsOnLine() bool {
	return self.Status == 1
}

//func HandlerUserOnlineStatus(mux *http.ServeMux, f func(status *UserOnlineStatus)) {
//
//	mux.HandleFunc("/user/updateOnlineStatus", func(writer http.ResponseWriter, request *http.Request) {
//
//		defer func() {
//			if rec := recover(); rec != nil {
//				log.Println(rec)
//			}
//		}()
//
//		val := request.URL.Query()
//
//		status, err := strconv.Atoi(val.Get("status"))
//		if err != nil {
//			panic(err)
//		}
//
//		uid, err := strconv.Atoi(val.Get("userId"))
//		if err != nil {
//			panic(err)
//		}
//
//		s := &UserOnlineStatus{
//			Token:     val.Get("token"),
//			WsId:      val.Get("wsId"),
//			UserId:    int64(uid),
//			GameId:    val.Get("gameId"),
//			Status:    status,
//			ServiceId: val.Get("serviceId"),
//		}
//
//		f(s)
//	})
//
//}

//获得用户信息指令
type UserGetUserCommand struct {
	UserId int64	`json:"userId"`
	Token string 	`json:"token"`
}

//获得账户余额指令
type AccountGetBalanceCommand struct{
	UserId int64	`json:"userId"`
}

type UserToken struct {
	ID    int64  `json:"id"`
	Token string `json:"token"`
}

type AccountGetBalanceInfo struct {
	Balance int64 `json:"balance"`
}

type UserConsumePointCommand struct {
	UserId  int64  `json:"userId"`  //用户id
	AgentId int    `json:"agentId"` //业主编号
	GameId  string `json:"gameId"`  //游戏id
	Amount  int64  `json:"amount"`  //码量
}

type UserConsumePointInfo struct {
	Amount int `json:"amount"` //剩余数量(-1 结束点控，> 0 每次剩余点控量)
}

//获取用户点控
type UserSearchUserPointsCommand struct {
	UserIds		[]int64	`json:"userIds"`		//用户Id
	GameId		string  `json:"gameId"`
	RoomId		string	`json:"roomId"`			//选填
}

//用户点控
type UserSearchUserPointsInfo struct {
	PointAmount			int64		`json:"pointAmount"`				 //点控剩余量
	PointTargetAmount	int64		`json:"pointTargetAmount"`			 //点控目标
	Level				int32		`json:"level"`						//点控级别(0代表没有点控)
	UserId				int64		`json:"user_id"`					//用户id
}

//用户点控返回
type UserSearchUserPointsInfoResultNew struct{
	Records  []UserSearchUserPointsInfo	`json:"records"`
}

//用户点控
type UserSearchUserPointsInfoNew struct {
	Level			  int32		`json:"level"`					//点控级别(0代表没有点控)
	UserId			  int64		`json:"user_id"`				//用户id
	PointAmount       int64     `json:"pointAmount"`           //点控剩余量
	PointTargetAmount int64     `json:"pointTargetAmount"`     //点控目标
}

//用户点控返回
type UserSearchUserPointsInfoResult struct{
	Records  []UserSearchUserPointsInfo	`json:"records"`
}

//推送用户点控
type UserUpdateUserPoint struct {
	UserId int64 `json:"userId"` //用户id
	Level  int   `json:"level"`  //点控级别(0代表没有点控)
}

type UpdateBalanceCommand struct {
	UserId int64    `json:"userId"`   //
	GameId string   `json:"gameId"`   //
	TradeNo string  `json:"tradeNo"`  // 唯一流水号: 赢（007）/输006 +10位时间戳+8位随机数
	Amount  int64   `json:"amount"`   // 赢为正，输为负
}

//麻将测试指定摸牌
type TestMjAppointTakeCardCommand struct {
	UserId  int64  `json:"userId"`
	Mj 		int32	`json:"mj"`
}





